import 'dart:mirrors'; //反射库

@Todo('todo', 'work')
class A {
  @Todo('todo', 'work')
  int a;
  @Todo('todo', 'work')
  A(this.a) {
    print(a);
  }
}

//注解  不就是一个信息容器
@Todo("who", "what")
class Todo {
  final String who;
  final String what;

  const Todo(this.who, this.what);
}

main() {

  Symbol name = Symbol('A');
  // Symbol("A") == #A                //方法、类、参数直接用名字
  // Symbol("A.t") == #A.t            //命名构造方法也是直接用名字
  // Symbol("a=") == #a=              //属性set方法(私有属性即为#_a=)
  // Symbol("a") == #a                //属性get方法
  // Symbol("==") == #==              //操作符直接使用符号
  // Symbol("") == Symbol.empty

  ClassMirror classMirror = reflectClass(A);
  var instance = classMirror.newInstance(Symbol.empty, [1]); //调用构造方法，打印1

  // 获取 class 上的元数据
  classMirror.metadata.forEach((metadata) {
    print(metadata.reflectee.who + ' ==> ' + metadata.reflectee.what);
  });
  //instance.reflectee： A对象， 打印1
  print(instance.reflectee.a);

}
